# 我们把变量从内存中变成可存储或传输的过程称之为序列化
# 反之,我们称之为反序列化

import json


class A:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def run(self):
        print('run......')


a = A('zhangsan', 18)


# str1 = json.dumps(a)     #TypeError: Object of type 'A' is not JSON serializable

# dumps 作用: 我们输入一个 数据类型 --> dict

def obj2dict(a):
    dict1 = {
        'name': a.name,
        'age': a.age
    }
    return dict1


def obj2list(a):
    list1 = [a.name, a.age]
    return list1


# str1 = json.dumps(a, default=obj2dict)  # default 转换规则
# print(type(str1))
# print(str1)
#
# # 有多少种类型的对象,就要写多少种转换规则
# # 有没有偷懒的办法?
#
# print(a.__dict__)

# 我们最终的通用的转换规则
str2 = json.dumps(a, default=lambda x: x.__dict__)
print(str2)

dict2 = json.loads(str2)
print(dict2)


def dict2a(dict2):
    return A(dict2['name'], dict2['age'])


b = dict2a(dict2)
print(b.name)
print(b.age)


# print(json.loads('False'))
print(json.loads('true'))